package com.zhengb.algorithmdemo.leetcode.array;

/**
 * Created by zhengbo on 2020/2/14.
 * <p>
 * LeetCode 第 242 题：给定两个字符串 s 和 t，编写一个函数来判断 t 是否是 s 的字母异位词。
 * <p>
 * <p>
 * <p>
 * 说明：你可以假设字符串只包含小写字母。
 * <p>
 * <p>
 * <p>
 * 示例 1
 * <p>
 * 输入: s = "anagram", t = "nagaram"
 * <p>
 * 输出: true
 * <p>
 * <p>
 * <p>
 * 示例 2
 * <p>
 * 输入: s = "rat", t = "car"
 * <p>
 * 输出: false
 * <p>
 * <p>
 * <p>
 * 字母异位词，也就是两个字符串中的相同字符的数量要对应相等。
 * 例如，s 等于 “anagram”，t 等于 “nagaram”，s 和 t 就互为字母异位词。因为它们都包含有三个字符
 * a，一个字符 g，一个字符 m，一个字符 n，以及一个字符 r。而当 s 为 “rat”，t 为 “car”的时候，s 和 t 不互为字母异位词。
 */
public class AnagramSolution {

    public static boolean isAnagram(String s, String t) {

        if (s.length() != t.length()) {
            return false;
        }

        char[] charArray1 = s.toCharArray();
        char[] charArray2 = t.toCharArray();

        int[] tempArray = new int[26];

        for (int i = 0; i < charArray1.length; i++) {

            char c1 = charArray1[i];

            int index1 = (int) c1 % 26;

            tempArray[index1] = tempArray[index1] + 1;

            char c2 = charArray2[i];

            int index2 = (int) c2 % 26;
            tempArray[index2] = tempArray[index2] - 1;
        }

        for (int i : tempArray) {
            if (i != 0) {
                return false;
            }
        }

        return true;
    }


    public static void main(String[] args) {

        System.out.println(isAnagram("anagram", "nagaram"));
    }
}
